/**
 * @Description: 容器抽象类
 * @author Beon
 * @date 2021/6/28
*/
import DropBox from './dropBox';
import Widget from './widget';
import {canDropInBox, canPlant} from '../types/base';
import DropControl from '../utils/dropControl';
import Plant from './plant';

export default abstract class Container extends DropBox implements canPlant, canDropInBox{
	// 容器类型
	protected type: string
	// 容器名称
	public display: string
	// 内部内容框
	insideBox: Array<Container | Widget> = []
	// 可拖动方法
	dropControl: DropControl
	// 数组位置信息（避免重复计算）
	$index: number
	// 父对象
	$parent: Container | Plant

	protected constructor(props: any) {
	    super(props);
	    this.display = props.display;
	    this.type = props.type;
	    this.dropControl = new DropControl(props, this);
	}

	/**
	 * 注册拖动开始事件
	 */
	mouseDownReg(): void {
	    // this.$el.addEventListener('mousedown', this.beforeDropBind);
	}

	/**
	 * 拖动前事件
	 * @param e
	 * @returns {Promise<void>}
	 */
	async beforeDropDeal(e: MouseEvent): Promise<void> {
	}

	/**
	 * 拖动时事件
	 * @param e
	 */
	dropMoveDeal(e: MouseEvent): void {
	}

	/**
	 * 拖动后事件
	 * @param e
	 * @returns {Promise<void>}
	 */
	async dropOverDeal(e: MouseEvent): Promise<void> {
	}

	/**
	 * 设置parent
	 * @param parent
	 */
	setParent(parent:Container | Plant): void {
	    this.$parent = parent;
	}
}
